package com.sise.DP;

/**
 *      123. 买卖股票的最佳时机 III
 *
 *      给定一个数组，它的第 i 个元素是一支给定的股票在第 i 天的价格。
 *      设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。
 *      注意：你不能同时参与多笔交易（你必须在再次购买前出售掉之前的股票）。
 *
 *      示例1:
 *      输入：prices = [3,3,5,0,0,3,1,4]
 *      输出：6
 *      解释：在第 4 天（股票价格 = 0）的时候买入，在第 6 天（股票价格 = 3）的时候卖出，这笔交易所能获得利润 = 3-0 = 3 。
 *           随后，在第 7 天（股票价格 = 1）的时候买入，在第 8 天 （股票价格 = 4）的时候卖出，这笔交易所能获得利润 = 4-1 = 3 。
 *
 */
public class _123_maxProfit {
    public int maxProfit(int[] prices) {

        int n = prices.length;
        int buy_1 = prices[0];
        int sell_1 = 0;

        int buy_2 = prices[0];
        int sell_2 = 0;

        for (int i = 1; i < n; i++){
            buy_1 = Math.min(buy_1, prices[i]);
            sell_1 = Math.max(sell_1, prices[i] - buy_1);
            buy_2 = Math.min(buy_2, prices[i] - sell_1);        // 这里用减。
            sell_2 = Math.max(sell_2, prices[i] - buy_2);       // prices[i] - buy_2 = prices[i] - (prices[i] - sell_1)
                                                                //                   = prices[i] + (sell_1 - prices[i])     buy_2 的替换
        }
        return sell_2;
    }
}
